package cn.design;

import cn.design.realize.ComputerBuilder;
import cn.design.realize.ComputerConcreteBuilder;
import cn.design.realize.ComputerDirector;
import cn.design.realize.ComputerProduct;

/**
 * @author dlq
 * @description 把当前类 BuilderClientTest  当做一个客户端，去买电脑的人员类
 * @date 2020/9/15 9:46
 * @since 1.0
 */
public class BuilderClientTest { //客户类
    public static void main(String[] args) {

        /*故事背景
        客户 小明 希望去电脑城买一台组装的台式主机
        其过程
        1. 电脑城老板（ComputerDirector）和 小明（BuilderClientTest） 进行需求沟通（买来打游戏？学习？看片？）
        2. 了解需求后，电脑城老板 将 小明的需求 给 装机员(操作人员)的构建ComputerBuilder传递,然 装机人员(操作人员) 操作
        3. 电脑城老板 指挥 装机人员(操作人员)（ComputerConcreteBuilder）去构建组件；
        4. 装机人员(操作人员)将组件组装起来成小成需要的电脑（ComputerProduct）
        */

        //1. 了解需求后，电脑城老板 将 小明的需求 给 装机员(操作人员)的构建ComputerBuilder传递 ,构建 ComputerBuilder 对象
        ComputerBuilder builder = new ComputerConcreteBuilder();
        //2. 电脑城老板 指挥 装机人员(操作人员)（ComputerConcreteBuilder）去构建组件；
        //如果需要外部参数的话 ComputerDirector director = new ComputerDirector(builder,xxx);传递进去
        ComputerDirector director = new ComputerDirector(builder);
        director.construct();
        //3. 装机人员(操作人员)将组件组装起来成小成需要的电脑（ComputerProduct）
        //客户得到最终的产品
        ComputerProduct product = builder.getComputerProduct();

        //打印产品信息
        product.print();
    }
}
